#! @SHELL@
# @configure_input@

# Make sure sorting is done the same on all configurations
# Note the use of sort -r below. This is done explicitly to work around
# a gcj bug (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21418)
LC_ALL=C; export LC_ALL
LANG=C; export LANG

abs_top_builddir=`cd "${top_builddir}"; pwd`
abs_top_srcdir=`cd "@top_srcdir@"; pwd`

echo "Adding java source files from srcdir '${abs_top_srcdir}'."

# We construct 'classes.1' as a series of lines.  Each line
# has three fields, which are separated by spaces.  The first
# field is the package of this class (separated by "/"s).
# The second field is the absolute pathname of the top-level directory
# for this file.  E.g., it might look like
# "/home/jezebel/classpath/vm/reference".
# The third field is the file name, like "java/lang/Object.java".
# We do this because it makes splitting for the gcj build much
# cheaper.
(cd @top_srcdir@
 @FIND@ java javax gnu org sun -follow -name '*.java' -print |
 sort -r | sed -e 's,/\([^/]*\)$, \1,' |
 while read pkg file; do
    echo $pkg ${abs_top_srcdir} $pkg/$file
 done) > ${top_builddir}/lib/classes.1

# The same, but for the external code.
for dir in \
   ${abs_top_srcdir}/external/w3c_dom \
   ${abs_top_srcdir}/external/sax \
   ${abs_top_srcdir}/external/relaxngDatatype \
   ${abs_top_srcdir}/external/jsr166 \
   ; do
   (cd $dir
   for subdir in java javax gnu org sun; do
      if test -d $subdir; then
	 @FIND@ $subdir -follow -name '*.java' -print |
	 sort -r | sed -e 's,/\([^/]*\)$, \1,' |
	 while read pkg file; do
	    echo $pkg $dir $pkg/$file
	 done
      fi
   done)
done >> ${top_builddir}/lib/classes.1

# Generate files for the VM classes.
: > vm.omit
: > vm.add
vm_dirlist=`echo "@vm_classes@" | sed -e 's/:/ /g'`
for dir in $vm_dirlist; do
   echo "Adding java source files from VM directory $dir"
   (cd $dir
   for subdir in java javax gnu org com sun; do
      if test -d $subdir; then
	 @FIND@ $subdir -name '*.java' -print
      fi
   done) | sed -e 's,/\([^/]*\)$, \1,' |
   while read pkg file; do
      echo $pkg $dir $pkg/$file >> vm.add
      echo $pkg/$file >> vm.omit
   done
done

# Only include generated files once.
if test "$abs_top_builddir" != "$abs_top_srcdir"; then
  echo "Adding generated files in builddir '${top_builddir}'."
  # Currently the only generated files are in gnu.*.
  (cd ${top_builddir}; @FIND@ gnu -follow -name '*.java' -print) |
  sort | sed -e 's,/\([^/]*\)$, \1,' |
  while read pkg file; do
     echo $pkg $top_builddir $pkg/$file
  done >> ${top_builddir}/lib/classes.1
fi


cat $1.omit vm.omit > tmp.omit
for dir in $vm_dirlist; do
   if test -f $dir/$1.omit; then
      cat $dir/$1.omit >> tmp.omit
   fi
done

# Mangle the omit expressions into a script suitable for old awk.
# Exploit the fact that many omissions are not regular expressions:
# assume a single file is listed if it does not contain '*', '$',
# and ends in '.java'.
sed_omit_hash='
1i\
  BEGIN {\
    omit[""] = 1
$a\
  }
/[*$]/d
/\.java$/!d
s|^|    omit["|
s|$|"] = 1|'
sed_omit_main_loop='
1i\
  {\
    if (omit[$3]) next
$a\
    print\
  }
/^[^*$]*\.java$/d
s|/|\\/|g
s|^|  if ($3 ~ /|
s|$|/) next|'

sed "$sed_omit_hash" <tmp.omit >tmp.awk
sed "$sed_omit_main_loop" <tmp.omit >>tmp.awk
@AWK@ -f tmp.awk < ${top_builddir}/lib/classes.1 > ${top_builddir}/lib/classes.tmp
mv ${top_builddir}/lib/classes.tmp ${top_builddir}/lib/classes.1

vm_omitlist=
for dir in $vm_dirlist; do
   if test -f $dir/$1.omit; then
      vm_omitlist="$vm_omitlist $dir/$1.omit"
   fi
done
cat $vm_omitlist | sed "$sed_omit_hash" > tmp.awk
cat $vm_omitlist | sed "$sed_omit_main_loop" >> tmp.awk
@AWK@ -f tmp.awk < vm.add >>${top_builddir}/lib/classes.1

rm -f vm.omit vm.add tmp.omit tmp.awk

new=
if test -f ${top_builddir}/lib/classes.2; then
  p=`diff ${top_builddir}/lib/classes.2 ${top_builddir}/lib/classes.1`
  if test "$p" != ""; then
    new="true"
  fi
else
  new="true"
fi

if test "$new" = "true"; then
  cp ${top_builddir}/lib/classes.1 ${top_builddir}/lib/classes.2
  # Strip the package part.
  sed -e 's/^[^ ]* //' -e 's, ,/,' < ${top_builddir}/lib/classes.1 \
     > ${top_builddir}/lib/classes
  echo "JAVA_SRCS = \\" > ${top_builddir}/lib/java.dep
  for i in `cat ${top_builddir}/lib/classes` ; do
    echo $i "\\" >> ${top_builddir}/lib/java.dep
  done
fi

exit 0
